package com.zyf.chapter02.behavior.chain.achieve.first.v1;

/**
 * 第一种实现方式：handler是所有处理器类的抽象父类 <p/>
 * 问题：实现的不够优雅，{@link Handler#handle()}函数,不仅包含自己的业务逻辑，还包含
 * 对下一个处理器的调用，也就是代码中的 successor.handle()。
 *
 * @author yifeng
 */
public abstract class Handler {
    protected Handler successor = null;

    public void setSuccessor(Handler successor) {
        this.successor = successor;
    }

    /**
     * 每个具体的处理器类的 handle() 函数的代码结构类似，如果它能处理该请求，就不能
     * 继续往下床底；如果不能处理，则交由后面的处理器来处理
     * 也就是调用 successor.handle(); <p/>
     * 如果不熟悉这种代码结构的哼许愿，再添加新的处理器类的时候，很可能忘记在
     * handle() 函数中调用 successor.handle(),这就会导致代码出现 bug。
     */
    public abstract void handle();
}
